/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 *
 * @author marceloml
 */

@Entity
@Table(name="turma")
public class Turma implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "CD_TURMA")
    private Integer id;    
    
    @Column(name = "TURMA")
    private String codigo;     
    
    @Column(name = "NM_TURMA")
    private String nome;
    
    @OneToOne
    @JoinColumn(name="UNIDADE")    
    private Unidade unidade;
    
    @Column(name = "FORMA_CALCULO")
    private Integer formaCalc;
    
    @Column(name = "VALOR")
    private BigDecimal valor;         
    
    @Column(name = "DT_CADASTRO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_cadastro;     
    
    @Column(name = "CD_USUARIO_CADASTRO")
    private Integer usuario_cadastro;      

    @Column(name = "DT_ATUALIZACAO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_atualizacao;          

    @Column(name = "CD_USUARIO_ATUALIZACAO")
    private Integer usuario_atualizacao;   
    
    @Column(name = "ATIVO")
    private Boolean ativo;
    
    /*
     *mappedBy = informamos o nome da variavel de instância que vai indicar a quem aquele One pertence, 
     *ou seja, uma aula ele deve dizer a qual turma este está associado.
     *TargetEntity = informa qual a entidade estamos associando.
     *FetchType.Lazy = foi escolhido por performace.    
     *cascade = ALL para permitir alterações em todos os relacionamentos.
     */
    
    @OneToMany(mappedBy = "turma", targetEntity= TurmaAula.class, fetch= FetchType.EAGER, cascade= CascadeType.ALL)
    @JoinColumn(name="CD_TURMA")    
    private Set<TurmaAula> turmaDisciplinaProfessor = new HashSet<TurmaAula>(0);


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }


    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Unidade getUnidade() {
        return unidade;
    }

    public void setUnidade(Unidade unidade) {
        this.unidade = unidade;
    }

    public Date getDt_cadastro() {
        return dt_cadastro;
    }

    public void setDt_cadastro(Date dt_cadastro) {
        this.dt_cadastro = dt_cadastro;
    }

    public Integer getUsuario_cadastro() {
        return usuario_cadastro;
    }

    public void setUsuario_cadastro(Integer usuario_cadastro) {
        this.usuario_cadastro = usuario_cadastro;
    }

    public Date getDt_atualizacao() {
        return dt_atualizacao;
    }

    public void setDt_atualizacao(Date dt_atualizacao) {
        this.dt_atualizacao = dt_atualizacao;
    }

    public Integer getUsuario_atualizacao() {
        return usuario_atualizacao;
    }

    public void setUsuario_atualizacao(Integer usuario_atualizacao) {
        this.usuario_atualizacao = usuario_atualizacao;
    }

    public Boolean getAtivo() {
        return ativo;
    }

    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }        

    public Set<TurmaAula> getTurmaDisciplinaProfessor() {
        return turmaDisciplinaProfessor;
    }

    public void setTurmaDisciplinaProfessor(Set<TurmaAula> turmaDisciplinaProfessor) {
        this.turmaDisciplinaProfessor = turmaDisciplinaProfessor;
    }

    public Integer getFormaCalc() {
        return formaCalc;
    }

    public void setFormaCalc(Integer formaCalc) {
        this.formaCalc = formaCalc;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }
    
}